#include "test.h"


int main()
{
	testMapaCategorias();
}

int testMapaCategorias()
{
        /* Creo los managers */
        MapaCategorias m;
        FeedManager fm;
        NewsManager nm;
        TagsManager tm;

        /* Inicializo los managers */
        fm.InicializarManager("C:\\UBA");
        nm.InicializarManager("C:\\UBA");
        tm.InicializarManager("C:\\UBA");

        /* Operaciones con Categorias */
        //GenerarCategorias(&m, &tm);
        MostrarCategorias(&m);

        /* Operaciones con Feeds */
        /*
        GenerarFeed_FEED_1(&fm);
        GenerarFeed_FEED_2(&fm);
        GenerarFeed_FEED_3(&fm);
        */
        MostrarFeeds(&fm);

        /* Operaciones con Noticias */
        /*
        GenerarNOTICIAS_FEED_1(&nm, 1);
        GenerarNOTICIAS_FEED_2_2(&nm, 2);
        GenerarNOTICIAS_FEED_2_1(&nm, 2);
        GenerarNOTICIAS_FEED_3_1(&nm, 3);
        GenerarNOTICIAS_FEED_3_4(&nm, 3);
        GenerarNOTICIAS_FEED_3_3(&nm, 3);
        GenerarNOTICIAS_FEED_3_2(&nm, 3);
        */
        MostrarNoticias(&nm, 1);
        MostrarNoticias(&nm, 3);
        MostrarNoticias(&nm, 2);

        /* Operaciones con Clasificacion */
        //GenerarCategorizacion(&nm, &tm);
        MostrarCategorizacion(&tm);

        //Prueba: Liquido una categoria aca para que cuando reorganice
        //las news, si no la encuentra la haga percha y no la pase
        //a los archivos reorganizados. (saco la 9).
        //m.EliminarCategoria("Internacionales");
        //MostrarCategorias(&m);

        /*
        MostrarNoticias(&nm, 1);
        MostrarNoticias(&nm, 3);
        MostrarNoticias(&nm, 2);
        */

        /* Obtengo informacion y lanzo las Reorganizaciones */
        TInternalMap::iterator iteradorMapaCategorias;
        ConjuntoIdCategoria conjuntoCategoriasVivas;
        ListaConsultaFeed::iterator iteradorListaFeeds;
        ConjuntoFeeds conjuntoFeedVivos;

        TInternalMap mapaCategoriasVivas = m.getMap();
        ListaConsultaFeed listaFeedsVivos = fm.ConsultarFeed();

        for (iteradorMapaCategorias = mapaCategoriasVivas.begin();
             iteradorMapaCategorias != mapaCategoriasVivas.end();
             iteradorMapaCategorias++)
        {
                conjuntoCategoriasVivas.insert(iteradorMapaCategorias->second);
        }

        for (iteradorListaFeeds = listaFeedsVivos.begin();
             iteradorListaFeeds != listaFeedsVivos.end();
             iteradorListaFeeds++)
        {
                conjuntoFeedVivos.insert(iteradorListaFeeds->getId());
        }



        tm.ReorganizarArchivos(conjuntoCategoriasVivas, nm);
        nm.ReorganizarArchivos(conjuntoCategoriasVivas, conjuntoFeedVivos);
        fm.ReorganizarArchivos();

        m.Persistir();        
}


void MostrarCategorias(MapaCategorias* m)
{
        printf("\n");
        printf("Listando Categorias...");
        printf("\n");
        TInternalMap::iterator iteradorMapa;
        TInternalMap mapa = m->getMap();

        for(iteradorMapa = mapa.begin();
            iteradorMapa != mapa.end();
            iteradorMapa++)
        {
                printf("%i - %s", iteradorMapa->second, iteradorMapa->first);
                printf("\n");
        }

        printf("\n");
        printf("Fin Listando Categorias");
}

void MostrarFeeds(FeedManager* f)
{
        printf("\n");
        printf("Listando Feeds...");
        printf("\n");

        ListaConsultaFeed::iterator iteradorFeeds;
        ListaConsultaFeed lista = f->ConsultarFeed();

        int posGlob;

        for(iteradorFeeds = lista.begin();
            iteradorFeeds != lista.end();
            iteradorFeeds++)
        {
                posGlob = iteradorFeeds->getPosicionGlobal(); 
                printf("PosicionGlobal: %i - Id: %i  -  Date: %i  -  URL: %s", posGlob,
                        iteradorFeeds->getId(), iteradorFeeds->getDate(),
                                iteradorFeeds->getURL());
                printf("\n");
        }

        printf("\n");
        printf("Fin Listando Feeds");
        printf("\n");
}

void MostrarNoticias(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("\n");
        printf("Listando Noticias de Feed ID: %i", idFeed);
        printf("\n");

        int cantidad = n->getCantidadNoticias(idFeed);
        printf("Cantidad: %i", cantidad);
        printf("\n");

        int paginas = cantidad / 4; //4 por pagina
        if (cantidad % 4 != 0)
        {
                paginas++;
        }

        ListaConsultaNoticias listaNews;
        ListaConsultaNoticias::iterator iteradorNews;
        ListaCategorias::iterator iteradorPositivos;
        ListaCategorias::iterator iteradorNegativos;

        int lastRetrieved = 0; //con esto lo hago empezar desde el final.        

        for (int i = 0; i < paginas; i++)
        {
                listaNews = n->consultarNews(lastRetrieved, 4, idFeed);

                for (iteradorNews = listaNews.begin();
                     iteradorNews != listaNews.end();
                     iteradorNews++)
                {
                        printf("Titulo: %s" , iteradorNews->getTitulo());
                        printf(" - ");
                        printf("Descripcion: %s" , iteradorNews->getDescripcion());
                        //printf(" - ");
                        //printf("Fecha: %i" , iteradorNews->getFecha());
                        printf("\n");
                        printf("Categorias Positivas: ");
                        for (iteradorPositivos = (iteradorNews->getListaPositivosReferencia())->begin();
                             iteradorPositivos != (iteradorNews->getListaPositivosReferencia())->end();
                             iteradorPositivos++)
                        {
                                printf(" %d ,", *iteradorPositivos);
                        }
                        printf("\n");
                        printf("Categorias Negativas: ");
                        for (iteradorNegativos = (iteradorNews->getListaNegativosReferencia())->begin();
                             iteradorNegativos != (iteradorNews->getListaNegativosReferencia())->end();
                             iteradorNegativos++)
                        {
                                printf(" %d ,", *iteradorNegativos);
                        }
                        printf("\n");

                        lastRetrieved++;
                }
        }

        printf("\n");
        printf("Fin Listando Noticias");
        printf("\n");
}

void MostrarCategorizacion(TagsManager* t)
{
        ConjuntoIdCategoria categoriasPorSi;
        ConjuntoIdCategoria categoriasPorNo;
        set<int> putosfeeds;
        ConjuntoTagItemConsulta::iterator iteradorConsultaPorTags;

        //Consulto por Noticias de categoria 6 (Sociales).
        categoriasPorSi.insert(6);
        ConjuntoTagItemConsulta resultadoConsulta = t->Consulta(putosfeeds, categoriasPorSi, categoriasPorNo, 0, 0);
        printf("\n");
        printf("Consulta por Categorias Si : 6");
        printf("\n");
        for (iteradorConsultaPorTags = resultadoConsulta.begin();
             iteradorConsultaPorTags != resultadoConsulta.end();
             iteradorConsultaPorTags++)
        {
                printf("Id de Feed: %i", iteradorConsultaPorTags->getIdFeed());
                printf("\n");
                printf("Posicion en Feed: %i", iteradorConsultaPorTags->getPosicion());
                printf("\n");
        }

        printf("\n");
        categoriasPorSi.clear();
        categoriasPorNo.clear();


        //Consulto por Noticias de categoria 6 (Sociales) y 8 (Policial).
        categoriasPorSi.insert(6);
        categoriasPorSi.insert(8);
        resultadoConsulta = t->Consulta(putosfeeds, categoriasPorSi, categoriasPorNo, 0, 0);
        printf("\n");
        printf("Consulta por Categorias Si : 6, 8");
        printf("\n");
        for (iteradorConsultaPorTags = resultadoConsulta.begin();
             iteradorConsultaPorTags != resultadoConsulta.end();
             iteradorConsultaPorTags++)
        {
                printf("Id de Feed: %i", iteradorConsultaPorTags->getIdFeed());
                printf("\n");
                printf("Posicion en Feed: %i", iteradorConsultaPorTags->getPosicion());
                printf("\n");
        }

        printf("\n");
        categoriasPorSi.clear();
        categoriasPorNo.clear();

        //Consulto por Noticias de categoria 6 (Sociales) y No 9.
        categoriasPorSi.insert(6);
        categoriasPorNo.insert(9);
        resultadoConsulta = t->Consulta(putosfeeds, categoriasPorSi, categoriasPorNo, 0, 0);
        printf("\n");
        printf("Consulta por Categorias Si : 6. Por No: 9");
        printf("\n");
        for (iteradorConsultaPorTags = resultadoConsulta.begin();
             iteradorConsultaPorTags != resultadoConsulta.end();
             iteradorConsultaPorTags++)
        {
                printf("Id de Feed: %i", iteradorConsultaPorTags->getIdFeed());
                printf("\n");
                printf("Posicion en Feed: %i", iteradorConsultaPorTags->getPosicion());
                printf("\n");
        }

        printf("\n");
        categoriasPorSi.clear();
        categoriasPorNo.clear();

}

void GenerarCategorias(MapaCategorias* m, TagsManager* t)
{
        printf("\n");
        printf("Generando Categorias...");

        string s;
        int i;

        s = "Deportes";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Cine";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Politica";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Rural";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Humor";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Sociales";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Economia";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Policial";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Internacionales";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Cocina";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Categoria A";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Categoria B";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Categoria C";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Categoria D";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        s = "Categoria E";
        i = m->AgregarCategoria(s);
        t->AgregarCategoria(i);

        printf("\n");
        printf("Fin Generando Categorias");
}


int GenerarFeed_FEED_1(FeedManager* f)
{
        printf("\n");
        printf("Generando Feed 1...");

        Feed f1;
        f1.setURL("www.feed_1.com");
        f1.setDate(10);

        int idFeed;
        f->AgregarFeed(f1, idFeed);


        printf("\n");
        printf("Fin Generando Feed 1");

        return idFeed;
}

int GenerarFeed_FEED_2(FeedManager* f)
{
        printf("\n");
        printf("Generando Feed 2...");

        Feed f2;
        f2.setURL("www.feed_2.com");
        f2.setDate(20);

        int idFeed;
        f->AgregarFeed(f2, idFeed);

        printf("\n");
        printf("Fin Generando Feed 2");

        return idFeed;
}

int GenerarFeed_FEED_3(FeedManager* f)
{
        printf("\n");
        printf("Generando Feed 3...");

        Feed f3;
        f3.setURL("www.feed_3.com");
        f3.setDate(30);

        int idFeed;
        f->AgregarFeed(f3, idFeed);

        printf("\n");
        printf("Fin Generando Feed 3");

        return idFeed;
}

void GenerarNOTICIAS_FEED_1(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 1 NOTICIAS 1...");

        Feed f1;
        f1.setURL("www.feed_1.com");
        f1.setDate(10);

        News n11;
        n11.setTitle("titulo feed 1 - noticia 1");
        n11.setDescription("descripcion feed 1 - noticia 1");
        f1.addNews(n11);
        News n12;
        n12.setTitle("titulo feed 1 - noticia 2");
        n12.setDescription("descripcion feed 1 - noticia 2");
        f1.addNews(n12);
        News n13;
        n13.setTitle("titulo feed 1 - noticia 3");
        n13.setDescription("descripcion feed 1 - noticia 3");
        f1.addNews(n13);
        News n14;
        n14.setTitle("titulo feed 1 - noticia 4");
        n14.setDescription("descripcion feed 1 - noticia 4");
        f1.addNews(n14);
        News n15;
        n15.setTitle("titulo feed 1 - noticia 5");
        n15.setDescription("descripcion feed 1 - noticia 5");
        f1.addNews(n15);
        News n16;
        n16.setTitle("titulo feed 1 - noticia 6");
        n16.setDescription("descripcion feed 1 - noticia 6");
        f1.addNews(n16);
        News n17;
        n17.setTitle("titulo feed 1 - noticia 7");
        n17.setDescription("descripcion feed 1 - noticia 7");
        f1.addNews(n17);
        News n18;
        n18.setTitle("titulo feed 1 - noticia 8");
        n18.setDescription("descripcion feed 1 - noticia 8");
        f1.addNews(n18);
        News n19;
        n19.setTitle("titulo feed 1 - noticia 9");
        n19.setDescription("descripcion feed 1 - noticia 9");
        f1.addNews(n19);
        News n110;
        n110.setTitle("titulo feed 1 - noticia 10");
        n110.setDescription("descripcion feed 1 - noticia 10");
        f1.addNews(n110);
        News n111;
        n111.setTitle("titulo feed 1 - noticia 11");
        n111.setDescription("descripcion feed 1 - noticia 11");
        f1.addNews(n111);
        News n112;
        n112.setTitle("titulo feed 1 - noticia 12");
        n112.setDescription("descripcion feed 1 - noticia 12");
        f1.addNews(n112);

        n->AgregarNews(idFeed, f1);

        printf("\n");
        printf("Fin Generando Feed 1 NOTICIAS 1...");
}

void GenerarNOTICIAS_FEED_2_1(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 2 NOTICIAS 1...");

        News n11;

        n11.setTitle("titulo feed 2 - noticia 1");
        n11.setDescription("descripcion feed 2 - noticia 1");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 2");
        n11.setDescription("descripcion feed 2 - noticia 2");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 3");
        n11.setDescription("descripcion feed 2 - noticia 3");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 4");
        n11.setDescription("descripcion feed 2 - noticia 4");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 5");
        n11.setDescription("descripcion feed 2 - noticia 5");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 2 NOTICIAS 1...");
}

void GenerarNOTICIAS_FEED_2_2(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 2 NOTICIAS 2...");

        News n11;

        n11.setTitle("titulo feed 2 - noticia 6");
        n11.setDescription("descripcion feed 2 - noticia 6");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 7");
        n11.setDescription("descripcion feed 2 - noticia 7");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 8");
        n11.setDescription("descripcion feed 2 - noticia 8");
        n->AgregarNews(idFeed, n11);
        n11.setTitle("titulo feed 2 - noticia 9");
        n11.setDescription("descripcion feed 2 - noticia 9");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 2 NOTICIAS 2...");
}


void GenerarNOTICIAS_FEED_3_1(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 3 NOTICIAS 1...");

        News n11;

        n11.setTitle("titulo feed 3 - noticia 1");
        n11.setDescription("descripcion feed 3 - noticia 1");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 3 NOTICIAS 1...");
}

void GenerarNOTICIAS_FEED_3_2(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 3 NOTICIAS 2...");

        News n11;

        n11.setTitle("titulo feed 3 - noticia 2");
        n11.setDescription("descripcion feed 3 - noticia 2");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 3 NOTICIAS 2...");

}

void GenerarNOTICIAS_FEED_3_3(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 3 NOTICIAS 3...");

        News n11;

        n11.setTitle("titulo feed 3 - noticia 3");
        n11.setDescription("descripcion feed 3 - noticia 3");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 3 NOTICIAS 3...");

}

void GenerarNOTICIAS_FEED_3_4(NewsManager* n, int idFeed)
{
        printf("\n");
        printf("Generando Feed 3 NOTICIAS 4...");

        News n11;

        n11.setTitle("titulo feed 3 - noticia 4");
        n11.setDescription("descripcion feed 3 - noticia 4");
        n->AgregarNews(idFeed, n11);

        printf("\n");
        printf("Fin Generando Feed 3 NOTICIAS 4...");
}

void GenerarCategorizacion(NewsManager* n, TagsManager* t)
{
        //Agrego a la categoria 8 (Policial)
        //la Noticia 6, 7, 8 y 9 del Feed 1.
        t->AgregarNoticia(8, 1, 5, 0);
        t->AgregarNoticia(8, 1, 6, 0);
        t->AgregarNoticia(8, 1, 7, 0);
        t->AgregarNoticia(8, 1, 8, 0);
        n->CategorizarNoticia(1, 5, 8);
        n->CategorizarNoticia(1, 6, 8);
        n->CategorizarNoticia(1, 7, 8);
        n->CategorizarNoticia(1, 8, 8);

        //Agrego a la categoria 6 (sociales)
        //la Noticia 1, 2 y 3 del Feed 1
        t->AgregarNoticia(6, 1, 0, 0);
        t->AgregarNoticia(6, 1, 1, 0);
        t->AgregarNoticia(6, 1, 2, 0);
        n->CategorizarNoticia(1, 0, 6);
        n->CategorizarNoticia(1, 1, 6);
        n->CategorizarNoticia(1, 2, 6);

        //Agrego a la categoria 9 (Internacional)
        //la Noticia 3 y 4 del Feed 3.
        t->AgregarNoticia(9, 3, 2, 0);
        t->AgregarNoticia(9, 3, 3, 0);
        n->CategorizarNoticia(3, 2, 9);
        n->CategorizarNoticia(3, 3, 9);

        //Agrego a la categoria 6 (Sociales)
        //la Noticia 3 y 4 del Feed 3.
        t->AgregarNoticia(6, 3, 2, 0);
        t->AgregarNoticia(6, 3, 3, 0);
        n->CategorizarNoticia(3, 2, 6);
        n->CategorizarNoticia(3, 3, 6);

        //Agrego a la categoria  8 (Policial)
        //las noticias 4, 5 y 6 del Feed 4
        t->AgregarNoticia(8, 2, 3, 0);
        t->AgregarNoticia(8, 2, 4, 0);
        t->AgregarNoticia(8, 2, 5, 0);
        n->CategorizarNoticia(2, 3, 8);
        n->CategorizarNoticia(2, 4, 8);
        n->CategorizarNoticia(2, 5, 8);

        //Agrego a la categoria  6 (Sociales)
        //las noticias 4, 5 y 6 del Feed 4
        t->AgregarNoticia(6, 2, 3, 0);
        t->AgregarNoticia(6, 2, 4, 0);
        t->AgregarNoticia(6, 2, 5, 0);
        n->CategorizarNoticia(2, 3, 6);
        n->CategorizarNoticia(2, 4, 6);
        n->CategorizarNoticia(2, 5, 6);
}


//      *******************
//
//      PRUEBAS ANTERIORES
//
//      *******************


/*
        MapaCategorias m;

        int i;

        MostrarCategorias(&m);
        /*
        string s;

        s = "Deportes";
        i = m.AgregarCategoria(s);
        s = "Politica";
        i = m.AgregarCategoria(s);
        s = "Cine";
        i = m.AgregarCategoria(s);
        s = "Cocina";
        i = m.AgregarCategoria(s);

        MostrarCategorias(&m);
        */

        //m.EliminarCategoria("Cine");

        /*
        i = m.AgregarCategoria("Deportes");
        i = m.AgregarCategoria("Politica");
        i = m.AgregarCategoria("Cine");
        i = m.AgregarCategoria("Cocina");



        m.EliminarCategoria("Cine");
        MostrarCategorias(&m);

        i = m.AgregarCategoria("CineABCDEF");
        MostrarCategorias(&m);


        m.Persistir();

        MostrarCategorias(&m);
        */

        /*
        bool b;

        //creo e inicializo los Managers.
        FeedManager fm;
        NewsManager nm;
        TagsManager tm;

        fm.InicializarManager("C:\\UBA");
        nm.InicializarManager("C:\\UBA");
        tm.InicializarManager("C:\\UBA");

        //creo un feed con 2 noticias
        Feed f1;
        f1.setURL("ABCDEFGHI");
        f1.setDate(10);
        News n11;
        n11.setTitle("tit noticia 1-1");
        n11.setDescription("desc not 1-1");
        f1.addNews(n11);
        News n12;
        n12.setTitle("tit noticia 1-2");
        n12.setDescription("desc not 1-2");
        f1.addNews(n12);
        News n13;
        n13.setTitle("tit noticia 1-3");
        n13.setDescription("desc not 1-3");
        f1.addNews(n13);
        News n14;
        n14.setTitle("tit noticia 1-4");
        n14.setDescription("desc not 1-4");
        f1.addNews(n14);
        News n15;
        n15.setTitle("tit noticia 1-5");
        n15.setDescription("desc not 1-5");
        f1.addNews(n15);
        News n16;
        n16.setTitle("tit noticia 1-6");
        n16.setDescription("desc not 1-6");
        f1.addNews(n16);
        News n17;
        n17.setTitle("tit noticia 1-7");
        n17.setDescription("desc not 1-7");
        f1.addNews(n17);
        News n18;
        n18.setTitle("tit noticia 1-8");
        n18.setDescription("desc not 1-8");
        f1.addNews(n18);
        News n19;
        n19.setTitle("tit noticia 1-9");
        n19.setDescription("desc not 1-9");
        f1.addNews(n19);
        News n110;
        n110.setTitle("tit noticia 1-10");
        n110.setDescription("desc not 1-10");
        f1.addNews(n110);
        News n111;
        n111.setTitle("tit noticia 1-11");
        n111.setDescription("desc not 1-11");
        f1.addNews(n111);
        News n112;
        n112.setTitle("tit noticia 1-12");
        n112.setDescription("desc not 1-12");
        f1.addNews(n112);

        //creo otro feed con 2 noticias
        Feed f2;
        f2.setURL("EIJHSDF");
        f2.setDate(20);
        News n21;
        n21.setTitle("tit noticia 2-1");
        n21.setDescription("desc not 2-1");
        f2.addNews(n21);
        News n22;
        n22.setTitle("tit noticia 2-2");
        n22.setDescription("desc not 2-2");
        f2.addNews(n22);

        //agrego los feeds.
        unsigned int feedId1;
        b = fm.AgregarFeed(f1, feedId1);

        unsigned int feedId2;
        b = fm.AgregarFeed(f2, feedId2);

        //agrego las noticias de los feeds.
        b = nm.AgregarNews(feedId1, f1);
        b = nm.AgregarNews(feedId2, f2);


        News n23;
        n23.setTitle("tit noticia 2-3");
        n23.setDescription("desc not 2-3");
        b = nm.AgregarNews(feedId2, n23);
        */

        /*
        int cantidadNoticias = nm.getCantidadNoticias(feedId1);
        cantidadNoticias = nm.getCantidadNoticias(feedId2);
        */

        /*
        //Agrego 3 Categorias (los id los obtengo de MapaCategorias)
        tm.AgregarCategoria(1);
        tm.AgregarCategoria(2);
        tm.AgregarCategoria(3);

        //pongo la primer noticias del feed 1 en las 3 categorias.
        //tm.AgregarNoticia(idcategoria, idfeed, posicionNoticia)
        tm.AgregarNoticia(1, feedId1, 0, 0);
        //tm.AgregarNoticia(2, feedId1, 0, 0);
        //tm.AgregarNoticia(3, feedId1, 0, 0);

        tm.AgregarNoticia(1, feedId1, 1, 0);
        tm.AgregarNoticia(1, feedId1, 2, 0);
        tm.AgregarNoticia(1, feedId1, 3, 0);
        tm.AgregarNoticia(1, feedId1, 4, 0);
        //tm.AgregarNoticia(2, feedId2, 0, 0);
        //tm.AgregarNoticia(3, feedId2, 1, 0);


        tm.SacarNoticia(1,feedId1, 4);

        ConjuntoIdCategoria categoriasPorSi;
        categoriasPorSi.insert(1);
        //categoriasPorSi.insert(2);

        ConjuntoIdCategoria categoriasPorNo;
        //categoriasPorNo.insert(3);

        set<int> putosfeeds;
        ConjuntoTagItemConsulta resultadoConsulta = tm.Consulta(putosfeeds, categoriasPorSi, categoriasPorNo, 0, 0);
        ConjuntoTagItemConsulta::iterator iteradorConsultaPorTags;

        //separar esto por id de feed, aca lo hago por los dos feeds
        //que conozco.
        ConjuntoPosiciones posicionesFeed1;
        ConjuntoPosiciones posicionesFeed2;
        for (iteradorConsultaPorTags = resultadoConsulta.begin();
             iteradorConsultaPorTags != resultadoConsulta.end();
             iteradorConsultaPorTags++)
        {

                if (feedId1 == (*iteradorConsultaPorTags).getIdFeed())
                {
                        posicionesFeed1.insert((*iteradorConsultaPorTags).getPosicion());
                }
                else
                {
                        posicionesFeed2.insert((*iteradorConsultaPorTags).getPosicion());
                }
        }

        ListaConsultaNoticias listaNoticiasConsulta;
        listaNoticiasConsulta = nm.consultarNews(posicionesFeed1, feedId1);

        ListaConsultaNoticias::iterator iteradorResult;
        for (iteradorResult = listaNoticiasConsulta.begin();
             iteradorResult != listaNoticiasConsulta.end();
             iteradorResult++)
        {
                printf(iteradorResult->getTitulo().c_str());
                printf(" ");
                printf(iteradorResult->getDescripcion().c_str());
                printf("\n");
        }


        nm.CategorizarNoticia(feedId1, 0, 18);
        nm.CategorizarNoticia(feedId1, 0, 35);
        nm.CategorizarNoticia(feedId1, 0, 7);
        nm.CategorizarNoticia(feedId1, 0, 9);

        nm.DesCategorizarNoticia(feedId1, 0, 8);
        nm.DesCategorizarNoticia(feedId1, 0, 88);
        nm.DesCategorizarNoticia(feedId1, 0, 88);
        
        nm.CategorizarNoticia(feedId1, 1, 44);
        nm.CategorizarNoticia(feedId1, 1, 66);
        nm.CategorizarNoticia(feedId1, 1, 666);

        nm.CategorizarNoticia(feedId1, 6, 2);
        nm.CategorizarNoticia(feedId1, 6, 22);
        nm.CategorizarNoticia(feedId1, 6, 222);

        ListaCategorias nuevaListaPositivosNoticiaSeisFeedUno;
        ListaCategorias nuevaListaNegativosNoticiaSeisFeedUno;
        nuevaListaPositivosNoticiaSeisFeedUno.push_back(3);
        nuevaListaPositivosNoticiaSeisFeedUno.push_back(33);
        nuevaListaPositivosNoticiaSeisFeedUno.push_back(333);

        nm.cambiarListas(feedId1, 6, nuevaListaPositivosNoticiaSeisFeedUno,
                nuevaListaNegativosNoticiaSeisFeedUno);
        */
        

        /*
        ListaConsultaNoticias listaNoticiasConsulta;
        //listaNoticiasConsulta = nm.consultarNews(0, 10, feedId1);
        ConjuntoPosiciones conjunto;
        conjunto.insert(0);
        conjunto.insert(1);
        conjunto.insert(2);
        conjunto.insert(6);
        listaNoticiasConsulta = nm.consultarNews(conjunto, feedId1);
        ListaCategorias::iterator iteradorPositivos;
        ListaCategorias::iterator iteradorNegativos;

        ListaConsultaNoticias::iterator iteradorResult;
        for (iteradorResult = listaNoticiasConsulta.begin();
             iteradorResult != listaNoticiasConsulta.end();
             iteradorResult++)
        {
                printf(iteradorResult->getTitulo().c_str());
                printf(" - ");
                printf(iteradorResult->getDescripcion().c_str());
                printf(" - ");
                printf("cantidad pos : %d", (iteradorResult->getListaPositivosReferencia())->size());
                printf(" - ");
                printf(" positivos: ");
                for (iteradorPositivos = (iteradorResult->getListaPositivosReferencia())->begin();
                     iteradorPositivos != (iteradorResult->getListaPositivosReferencia())->end();
                     iteradorPositivos++)
                {
                        printf(" %d ,", *iteradorPositivos);
                }
                printf(" - ");
                printf(" negativos: ");
                for (iteradorNegativos = (iteradorResult->getListaNegativosReferencia())->begin();
                     iteradorNegativos != (iteradorResult->getListaNegativosReferencia())->end();
                     iteradorNegativos++)
                {
                        printf(" %d ,", *iteradorNegativos);
                }
                printf("\n");
        }
        */



        //resultadoConsulta = nm.consultarNews(posicionesFeed2, feedId2);


        /*
        nm.EliminarNews(1);

        fm.EliminarFeed(0);
        */

        /*
        ListaConsultaFeed f;
        f = fm.ConsultarFeed();
        ListaConsultaFeed::iterator iterador;
        for (iterador = f.begin(); iterador != f.end(); iterador++)
        {
                printf(iterador->getURL().c_str());
                printf("\0");
                printf("%d", iterador->getDate());
        }

        /*
        fm.EliminarFeed(4);

        return true;
        */

